from django.db import models
import datetime
import uuid

class CaseDemo14UserRole(models.Model):
    role = models.IntegerField(verbose_name="角色类型")  # 0-普通，1-管理员，2-超级管理员
    remark = models.CharField(max_length=100, verbose_name="角色说明")
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")

    class Meta:
        db_table = 'CaseDemo14UserRole'


class CaseDemo14User(models.Model):
    useronlyID=models.AutoField(primary_key=True,verbose_name=u"用户ID")
    uuid=models.CharField(max_length=50,verbose_name=u"UUID",default=uuid.uuid4,blank=True, null=True)# 未来可以用作唯一标识
    username=models.CharField(max_length=20,verbose_name=u"用户名",default="123",blank=True, null=True)# 用户名要保持唯一
    realname=models.CharField(max_length=20,verbose_name=u"真实姓名",default="123",blank=True, null=True)
    card=models.CharField(max_length=20,verbose_name=u"身份证号",default="123",blank=True, null=True)
    password=models.CharField(max_length=20,verbose_name=u"密码",blank=True, null=True)
    sex=models.CharField(max_length=2,verbose_name=u"性别",default="男",blank=True, null=True)
    age=models.IntegerField(verbose_name=u"年龄",default=20,blank=True, null=True)
    email=models.EmailField(verbose_name=u"邮箱",default="123456789@qq.com",blank=True, null=True)
    phone=models.CharField(max_length=11,verbose_name=u"手机号",default="12345678901",blank=True, null=True)
    vxinfo=models.CharField(max_length=20,verbose_name=u"微信号",default="123456789",blank=True, null=True)
    address=models.CharField(max_length=50,verbose_name=u"地址",default="北京市",blank=True, null=True)
    status=models.IntegerField(verbose_name=u"状态",default=1,blank=True, null=True)# 0-禁用 1-启用
    descrption=models.CharField(max_length=100,verbose_name="个性签名",default="我是一个个性签名哦",blank=True, null=True)
    create_time=models.DateTimeField(auto_now_add=True,verbose_name=u"创建时间",blank=True, null=True)
    update_time=models.DateTimeField(auto_now=True,verbose_name=u"更新时间",blank=True, null=True)
    # 建立外键
    role = models.ForeignKey(
        CaseDemo14UserRole,
        on_delete=models.SET_NULL,
        null=True,                   # 必须设置，允许该字段为 NUL
        related_name="users",
        verbose_name="角色",
        default=0 # 默认为普通用户(你需要确保这个角色存在)
    )
    """
    CaseDemo14UserRole、这是被关联的模型，即外键指向的目标模型。
    表示“一个用户拥有一个角色，而一个角色可以对应多个用户”。
    🔹 on_delete=models.CASCADE、指定当被关联的 CaseDemo14UserRole 记录被删除时，当前模型中的相关记录应如何处理。
    CASCADE 的意思是：当某个角色被删除时，所有关联该角色的用户记录也会被自动删除（级联删除）。
    常见的 on_delete 选项包括：
        CASCADE: 级联删除
        SET_NULL: 被删除时设置为 NULL（字段必须 null=True）
        PROTECT: 阻止删除，抛出错误
        SET_DEFAULT: 设置为默认值（字段必须设有 default 值）
    🔹 related_name="users"
    这是反向关联的名称，用于从 CaseDemo14UserRole 模型访问关联的用户。
        比如，如果你有一个角色对象 role_obj，那么你可以通过 role_obj.users.all() 来获取拥有该角色的所有用户。
    🔹 verbose_name="角色"
        这是 Django Admin 或表单显示的人类可读名称。用于生成更友好的界面标签。
    """
    class Meta:
        db_table = 'CaseDemo14User'

class Article(models.Model):
    title = models.CharField(max_length=200, verbose_name="标题")
    content = models.TextField(verbose_name="正文内容")
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    update_time = models.DateTimeField(auto_now=True, verbose_name="更新时间")
    # 外键：文章的作者（一个用户可以写多篇文章）
    author = models.ForeignKey(
        CaseDemo14User,
        on_delete=models.SET_NULL,
        null=True,  # 必须设置，允许该字段为 NUL
        related_name="articles",
        verbose_name="作者"
    )
    class Meta:
        db_table = 'CaseDemo14Article'








####举个简单的例子
class Classroom(models.Model):
    room_number = models.CharField(max_length=10)  # 比如 "101", "3A"
    floor = models.IntegerField()
    def __str__(self):
        return self.room_number
    class Meta:
        db_table = 'CaseDemo14Classroom'


class Student(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerField()
    classroom = models.ForeignKey(
        Classroom,
        on_delete=models.SET_NULL,
        null=True,  # 必须设置，允许该字段为 NUL
        related_name='students'
    )
    class Meta:
        db_table = 'CaseDemo14Student'
